import { createI18n } from 'vue-i18n'
import qs from 'qs'
import { langCompatible } from '@/utils/dictMeth'
// 前端字段
import languagePack from './lang.js'
// 前后端共用字段
import afterEndLang from './afterLangH5.js'

const totalLangPack = [...languagePack, ...afterEndLang]
export const getLanguageData = (lang) => {
  const obj = {}
  totalLangPack.forEach((item) => {
    obj[item.key] = item[lang]
  })
  return obj
}

const messages = {
  'zh-CN': {
    ...getLanguageData('zh_CN')
  },
  en: {
    ...getLanguageData('en')
  },
  de: {
    ...getLanguageData('de')
  },
  fr: {
    ...getLanguageData('fr')
  },
  ja: {
    ...getLanguageData('ja')
  }
}

/**
 * @description 获取当前翻译的语种
 * @param {*} data
 * @returns
 */
export const getLanguage = () => {
  /**
   * 优先级：
   * 1. 先看地址栏参数中有没有；
   * 2. 再看localstorage中有没有；
   * 3. 然后再通过navigator.language获取浏览器默认语言，看是否是你的应用所支持的语言，若是，则采用之；
   * 4. 最后才是使用回退语言（例如，比较通用的英语）。
   */
  let language =
    qs.parse(window.location.href.split('?')[1]).lang ||
    localStorage.getItem('systemLanguage') ||
    navigator.language ||
    'zh-CN'
  language = Object.keys(messages).includes(language) ? language : 'zh-CN'
  return language
}

const i18n = createI18n({
  legacy: false, // 处理报错 Not available in legacy mode
  globalInjection: false, // 全局生效$t
  locale: getLanguage(),
  messages,
  silentTranslationWarn: true
})

export const $t = (key, label) => {
  if (!i18n) return key
  return langCompatible(key, label)
}

export default i18n
